<template>

</template>

<script>
import { parseTime } from '@/utils/ruoyi'
import { _deepClone } from '@/utils'

export default {
  name: 'ViewBoardIndex',
  data() {
    return {
      isChange: false,
      isReset: false,
    }
  },
  watch: {
    filterConfig: {
      handler: function (val, newVal) {
        //根据宽高重新渲染echarts图表
        if (val.id) {
          this.setFilterValue(val.id, val.value)
        }
      },
      deep: true,
    },
  },
  methods: {
    /**
     * 根据id获取配置数据中某一个组件数据
     * @param id
     * @param configData
     * @returns {{childrenList:null, index: null, common: null,}}
     */
    getConfigDataById(id, configData) {
      let data = configData ? configData : this.configData
      let result = {
        childrenList: null, //数据children集合，方便后续在集合中插入数据
        index: null,        //查询数据在children的下标
        data: null         //查询的数据
      }
      if (data.length) {
        data.forEach((f, index) => {
          if (f.id === id) {
            result.data = f
            result.index = index
            result.childrenList = data
          }
          if (!result.data && f.children && f.children.length) {
            result = this.getConfigDataById(id, f.children)
          }
        })
      }
      return result
    },
    /**
     * 查询条件赋值
     * @param filterId
     * @param value
     */
    setFilterValue(filterId, value) {
      if (this.configData[0].type !== 'filterWrap') return
      let itemData = this.configData[0].children.find(item => item.id === filterId)
      if (itemData) {
        itemData.content = value
        this.isReset = false
        this.handleSearch(this.configData)
      }
    },

    /**
     * 全局配置查询
     * @param configData
     */
    handleSearch(configData) {
      let tempData = configData ? configData : this.configData,
        variableConfig = []
      this.isChange = false //设置isChange禁止监听防止重复
      tempData[0].children.forEach(item => {
        item.content = this.isReset ? null : item.content
        if (item.analysisList.length) {
          item.analysisList.forEach(ds => {
            if (ds.isCheck) {
              let data = this.getConfigDataById(ds.id, tempData)
              if (!this.isReset && item.content) {
                let content = this.getValue(item.timeConfig, item.content),
                  variableItem = variableConfig.find(v => v.name === ds.selectVarName)
                if (variableItem) {
                  variableItem.defaultValue = item.filterType === 'dateFilter' ? this.setFormDate(item.formDataType, content) : content
                } else {
                  variableConfig.push({
                    name: ds.selectVarName,
                    type: ds.selectVarType,
                    defaultValue: item.filterType === 'dateFilter' ? this.setFormDate(item.formDataType, content) : content
                  })
                  //时间范围筛选器需要添加结束时间
                  if (item.timeConfig === 'datetimeRange' && item.content && item.content.length > 1) {
                    variableConfig.push({
                      name: ds.selectVarName2,
                      type: ds.selectVarType2,
                      defaultValue: this.setFormDate(item.formDataType, item.content[1])
                    })
                  }
                }
              }
              data.data.chartForm.variableConfig = variableConfig
            }
          })
        }
      })
      this.isReset = false
    },
    getValue(type, content) {
      if (!content) {
        return ''
      } else {
        if (typeof content === 'string' || type === 'datetime') {
          return content
        } else if (type === 'datetimeRange') {
          return content[0]
        }
      }
    },

    /**
     * 清除所有图表筛选条件以及筛选器值
     */
    clearFilter() {
      let configData = _deepClone(this.configData)
      if (configData.length && configData[0].type === 'filterWrap') {
        // this.handleReset()
        this.isReset = true
        this.handleSearch(configData)
      }
      return configData
    },

    /**
     * 重置
     */
    handleReset() {
      this.configData[0].children.forEach(item => {
        item.content = null
      })
    },

    /**
     * 转换时间格式
     * @param type
     * @param value
     */
    setFormDate(type, value) {
      let date = ''
      if (value) {
        switch (type) {
          case 'timeStamp':
            date = new Date(value).getTime()
            break
          case 'UTC':
            date = new Date(value)
            break
          default:
            date = parseTime(new Date(value), type)
        }
      }
      return date
    }
  }
}
</script>

<style scoped>
</style>
